/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package lab1;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author 0322821
 */
public class Pessoa {
    private String nome;
    private int idade;
    private char sexo;
    private Pessoa conjuge,pai,mae;
    private List<Pessoa> filhos = new ArrayList<Pessoa>();


    public Pessoa(String nome,int idade,char sexo)
    {
        this.nome = nome;
        this.idade = idade;
        this.sexo = sexo;
    }


    public void setNome(String nome)
    {
        this.nome = nome;
    }
    public String getNome()
    {
        return this.nome;
    }
    public void setIdade(int idade)
    {
        this.idade = idade;
    }
    public int getIdade()
    {
        return this.idade;
    }
    public void setSexo(char sexo)
    {
        this.sexo = sexo;
    }
    public char getSexo()
    {
        return this.sexo;
    }

    public Pessoa getConjuge()
    {
        return this.conjuge;
    }

    private void setConjuge(Pessoa conjuge)
    {
        this.conjuge = conjuge;
    }

    public static boolean casamento(Pessoa pessoa1,Pessoa pessoa2)
    {
        if(pessoa1.getSexo()!= pessoa2.getSexo())
        {
            if(pessoa1.getIdade() >= 18 && pessoa2.getIdade() >=18)
            {
                if(pessoa1.conjuge == null && pessoa2.conjuge == null)
                {
                    pessoa1.setConjuge(pessoa2);
                    pessoa2.setConjuge(pessoa1);
                    return true;
                }
            }
        }
        return false;
    }

    public Pessoa getPai()
    {
        return this.pai;
    }

    public void setPai(Pessoa pai)
    {
        this.pai = pai;
        pai.adicionarFilho(this);
    }

    public Pessoa getMae()
    {
        return this.mae;
    }

    public void setMae(Pessoa mae)
    {
        this.mae = mae;
        mae.adicionarFilho(this);

    }

    public List<Pessoa> getFilhos()
    {
        return this.filhos;
    }

    public void adicionarFilho(Pessoa filho)
    {
        filhos.add(filho);
    }

    public List<Pessoa> getIrmaos()
    {
        List<Pessoa> irmaos = null;

        if(this.getPai() != null)
        {
            irmaos = this.getPai().getFilhos();
            for(int i=0;i<irmaos.size();i++)
            {
                if(irmaos.get(i).equals(this))
                {
                    irmaos.remove(i);
                }
            }
        }
        return irmaos;
    }

    public List<Pessoa> getTios()
    {
        List<Pessoa> tios = null;
        if(getPai() != null)
        {
            tios = getPai().getIrmaos();
        }
        return tios;
    }

    public List<Pessoa> getPrimos()
    {
        List<Pessoa> primos = new ArrayList <Pessoa>();

        List<Pessoa> tios = getTios();
        if(tios != null)
        {
           for(int i=0; i<tios.size();i++)
           {
              primos.addAll(tios.get(i).getFilhos());
           }
        }
        return primos;
    }

    public List<Pessoa> getNetos()
    {
        List<Pessoa> netos = null;
        List<Pessoa> meusfilhos = getFilhos();
        if(meusfilhos != null)
        {
            for(int i=0; i<meusfilhos.size();i++)
            {
                netos.addAll(meusfilhos.get(i).getFilhos());
            }
        }
        return netos;
    }



}
